package com.leecode.xiehf.page_02;

import com.leecode.Printer;

/**
 * 给你两个二进制字符串，返回它们的和（用二进制表示）。
 *
 * 输入为 非空 字符串且只包含数字 1 和 0。
 * https://leetcode-cn.com/problems/add-binary/
 */
public class Solution_0067 extends Printer {

    public static void main(String[] args) {
        Solution_0067 solution = new Solution_0067();
        String s = solution.addBinary("1011", "1101");
        print(s);
    }

    public String addBinary(String a, String b) {
        char[] short_arr = a.toCharArray();
        char[] long_arr = b.toCharArray();
        if (a.length() > b.length()) {
            // 小的
            short_arr = b.toCharArray();
            // 长的
            long_arr = a.toCharArray();
        }

        StringBuilder sb = new StringBuilder();
        int up = 0;
        int i = long_arr.length - 1, j = short_arr.length - 1;
        for (; i >= 0 && j >= 0; i--, j--) {
            int i1 = long_arr[i] - '0';
            int j1 = short_arr[j] - '0';
            int r = i1 + j1 + up;
            if (r >= 2) {
                up = 1;
            } else {
                up = 0;
            }
            sb.append(r % 2);
        }
        for (; i >= 0; i--) {
            int j1 = long_arr[i] - '0';
            int r = j1 + up;
            if (r == 2) {
                up = 1;
            } else {
                up = 0;
            }
            sb.append(r % 2);
        }
        if (up > 0) {
            sb.append(up);
        }
        return sb.reverse().toString();
    }
}
